﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Practices.Unity;
using Autocentro.Entities;
using Autocentro.BussinesLogic;

namespace Autocentro.UI
{
    public partial class FrmProducto : Form
    {
        [Dependency]
        public IProductoBL ProductoBL { get; set; }
        public FrmProducto()
        {
            InitializeComponent();
            this.BuildUp();
        }

        private void FrmProducto_Load(object sender, EventArgs e)
        {
            CargaData();
        }

        private void CargaData()
        {
            var criterio = txtCriterio.Text == string.Empty ? null : txtCriterio.Text;
            pRODUCTOBindingSource.DataSource = ProductoBL.GetFromProductosByCriterio(criterio);
        }

        private void txtCriterio_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (rbProdutos.Checked == true)
                {
                    SoloProductos();
                }
                else if (rbServicios.Checked == true)
                {
                    SoloServicios();
                }
                else
                {
                    CargaData();
                }
            }
        }

        private void SoloProductos()
        {
            var criterio = txtCriterio.Text == string.Empty ? null : txtCriterio.Text;
            pRODUCTOBindingSource.DataSource = ProductoBL.GetAllFromSoloProductos(criterio);
        }

        private void SoloServicios()
        {
            var criterio = txtCriterio.Text == string.Empty ? null : txtCriterio.Text;
            pRODUCTOBindingSource.DataSource = ProductoBL.GEtAllFromSoloServicios(criterio);
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {

            if (rbProdutos.Checked == true)
            {
                SoloProductos();
            }
            else if (rbServicios.Checked == true)
            {
                SoloServicios();
            }
            else
            {
                CargaData();
            }
        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            var frmProducto = new FrmMttProducto();
            frmProducto.AddProducto();
            frmProducto.ShowDialog();
            CargaData();
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            var updateProducto = pRODUCTOBindingSource.Current as PRODUCTO;
            if (updateProducto!=null)
	        {
                if (updateProducto.ProductoServicio == true)
                {
                    var servicioM = new FrmMttServicio();
                    servicioM._servicio = updateProducto;
                    servicioM.UpdateServicio();
                    servicioM.ShowDialog();
                    CargaData();
                }
                else
                {
                    var frmProducto = new FrmMttProducto();
                    frmProducto.producto = updateProducto;
                    frmProducto.UpdateProducto();
                    frmProducto.ShowDialog();
                    CargaData();
                }
	        }
            else
            {
                MessageBox.Show("Debe de seleccionar un Producto o Servicio");
            }
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            var removeProducto = pRODUCTOBindingSource.Current as PRODUCTO;
            if (removeProducto != null)
            {
                var rpt = MessageBox.Show(this,
                    string.Format("¿Desea eliminar el producto: {0}?", removeProducto.Descripcion + "\n Costo: " + removeProducto.Costo),
                    "Mensaje",
                    MessageBoxButtons.YesNo,
                    MessageBoxIcon.Question);

                if (rpt == DialogResult.Yes)
                {
                    ProductoBL.RemoveProducto(removeProducto.Id);
                    if (rbServicios.Checked)
                    {
                        SoloServicios();
                    }
                    else if (rbProdutos.Checked)
                    {
                        SoloProductos();
                    }
                    else
                    {
                        CargaData();
                    }
                    
                }
            }
            else
            {
                MessageBox.Show("Debe seleccionar un Producto");
            }
        }

        private void btnServicio_Click(object sender, EventArgs e)
        {
            var frmServicio = new FrmMttServicio();
            frmServicio.AddServicio();
            frmServicio.ShowDialog();
            CargaData();
        }

        private void rbTodos_CheckedChanged(object sender, EventArgs e)
        {
            if (rbTodos.Checked==true)
            {
                CargaData();
            }
        }

        private void rbProdutos_CheckedChanged(object sender, EventArgs e)
        {
            if (rbProdutos.Checked == true)
            {
                SoloProductos();
            }
        }

        private void rbServicios_CheckedChanged(object sender, EventArgs e)
        {
            if (rbServicios.Checked == true)
            {
                SoloServicios();
            }
        }

        private void txtCriterio_KeyPress(object sender, KeyPressEventArgs e)
        {
            string cadena = Convert.ToString("-") + Convert.ToString("/") + Convert.ToString(".") + Convert.ToString(",") + (char)8;

            if (Char.IsLetter(e.KeyChar) || cadena.Contains(e.KeyChar) || (char.IsNumber(e.KeyChar)))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }

        }
    }
}
